package com.cskaoyan.javase.oop2.extend2.basic2;

/**
 * @description: 继承中两个类的关系
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 继承中两个类的，从属关系
 * 继承中子类"is-a"父类，子类可以看成是一个父类
 * 1，代码层次验证
 *  通过把子类对象用一个父类引用指向
 *  自动类型提升说的是基本数据类型，是自动的
 *  同样的对于引用数据类型也存在一个自动的类型转换，这种类型转换我们称之为向上转型
 *  就是把子类引用转换成父类引用，向上转型也是自动的
 *
 *  2，数据类型的层次，从定义层次
 * 数据类型的定义：一组数据的集合，和基于这组数据的合法操作
 * 引用数据类型的定义： 成员变量的集合+成员方法的继承
 * 继承是继承了父类的所有成员，这样就把成员变量的集合+成员方法的集合都继承了
 * 于是我说子类就是一个父类，这种是没有问题的
 *
 * 3，最直观的，逻辑角度
 *  老师是一个人，学生也是一个人...
 *  动物：猫，狗，人....
 *
 *  父类和子类有没有关系？
 *  父类不一定可以看成一个子类，实际上大部分时间都不可以
 * - 教师是人，但人不一定就是教师
 * - 子类扩展了父类，多数情况下子类都比父类功能要强大
 *  儿子能当爸爸，因为儿子比爸爸强，比爸爸功能丰富
 *  爸爸却不能当儿子，因为爸爸的功能没有儿子多
 *
 */
public class Demo {
    public static void main(String[] args) {
        // 通过把子类对象用一个父类引用指向
        //Father f = new Son(); //父类引用指向子类对象
        Son son = new Son();
        Father f = son; //发生了类型转换，并且是子类转换成父类

    }
}

class Father {
}

class Son extends Father {
}
